【iOS】block的使用

您所在的位置:网站首页 ios block用法 【iOS】block的使用

【iOS】block的使用

2024-05-13 23:51| 来源: 网络整理| 查看: 265

【iOS】block的使用

 

  Block 是iOS在4.0之后新增的程式语法,一般用于回调方法,功能上和delegate类似。本文将讲解block的几种常见的使用方法,当然,block中最值得注意的还是它的内存管理,我将在《》中讲到。

环境信息:

Mac OS X 10.9.5

Xcode 5.1.1

IOS 7.1

正文:

为什么要使用block?

1. 可代替delegate完成回调,而不需要像delegate那样繁琐

2. 在某些方面,可代替selector(如NSNotificationCenter在addObserver的时候,可以使用block,而不用单独定义方法)

3. 延长对象的生命周期(block会自动持有对象,这将在《》中讲到)

4. 提高代码的复用性和可读性

block结构

block的结构和C语言的函数指针结构类似,只是将函数指针的*换成了^

block结构示意图

block结构示意图

如何使用? 一、直接在方法中定义

1. 无返回值无参数

定义:

void (^block) (void);

赋值:

block = ^{ NSLog(@"block的内容"); };

调用:

block();

2. 有返回值有参数

定义:

int (^block)(int a);

赋值:

int (^block)(int a) = ^int(int a) { return a > 0 ? a : -a; };

调用:

NSLog(@"%d", block(-10));

结果:2015-08-19 17:02:19.713 SX[4922:159637] 10

 

二、将block定义为属性

定义:

@property (nonatomic, copy) int (^block)(int a);

赋值:

Class *object = [[Class alloc] init]; object.block = ^int (int a, int b) { return a > b ? a : b; };

调用:

调用将会在Class内部进行,所以这里使用到的self是指上面的object对象。调用之前,最好先判断对象是否给block赋值,如果block为nil,调用block会导致程序崩溃。

if (_block) { self.block(10); } 三、在方法中将block作为参数传入

着这种用法中,我们通常会使用typedef为block取一个别名

定义:

typedef void(^Block)(int a); - (void)nslogParameterWithBlock:(Block)block { if (block) { block(10); } }

赋值并调用:

[object nslogParameterWithBlock:^(int a) { NSLog(@"%d", a); }]; 总结:

block使用方便,在项目中,合适的使用block也是你的代码看起来高端大气上档次,但是block的内存管理确实是一项非常重要也非常容易出错的地方,稍不注意便会造成内存泄露,所以,在使用block的时候,也要小心。

 本文转载自:http://www.brighttj.com/ios/ios-block-foundation.html

blockios


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3